package com.jpress.ejb;

import java.util.List;

import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;

import com.jpress.model.Comentario;
import com.jpress.model.Post;
import com.jpress.remote.PostRemote;

@Stateless(mappedName="bean/post")
public class PostEJB implements PostRemote{

	@PersistenceContext(unitName="jpressEE")
	private EntityManager entityManager;
	
	@Override
	public void inserir(Post post) throws Exception{
		try {
			entityManager.persist(post);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public void atualizar(Post post) throws Exception {
		try {
			entityManager.merge(post);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public void excluir(Post post) throws Exception {
		try {
			post = entityManager.merge(post);
			entityManager.remove(post);
		} catch (Exception e) {
			throw e;
		}
	}

	@Override
	public List<Post> findAllByAutorCodigo(int autorCodigo){
		Query query = entityManager.createNamedQuery("Post.findAllByAutorCodigo");
		query.setParameter("autorCodigo", autorCodigo);
		@SuppressWarnings("unchecked")
		List<Post> resultado = (List<Post>) query.getResultList();
		for (Post post : resultado) {
			for (Comentario comentario : post.getComentarios()) {
				
			}
		}
		return resultado;
	}
	
	@Override
	public List<Post> findAllByCategoriaCodigo(int categoriaCodigo){
		Query query = entityManager.createNamedQuery("Post.findAllByBlogCodigo");
		query.setParameter("categoriaCodigo", categoriaCodigo);
		@SuppressWarnings("unchecked")
		List<Post> resultado = (List<Post>) query.getResultList();
		return resultado;
	}	

	@Override
	public List<Post> pesquisarByAutorCodigo(String titulo, String conteudo, int autorCodigo){
		Query query = entityManager.createNamedQuery("Post.pesquisarByAutorCodigo");
		query.setParameter("titulo", "%" + titulo + "%");
		query.setParameter("conteudo", "%" + conteudo + "%");
		query.setParameter("blogCodigo", autorCodigo);
		@SuppressWarnings("unchecked")
		List<Post> resultado = (List<Post>) query.getResultList();
		return resultado;
	}
	
	@Override
	public List<Post> pesquisarByCategoriaCodigo(String titulo, String conteudo, int categoriaCodigo){
		Query query = entityManager.createNamedQuery("Post.pesquisarByCategoriaCodigo");
		query.setParameter("titulo", "%" + titulo + "%");
		query.setParameter("conteudo", "%" + conteudo + "%");
		query.setParameter("categoriaCodigo", categoriaCodigo);
		@SuppressWarnings("unchecked")
		List<Post> resultado = (List<Post>) query.getResultList();
		return resultado;
	}		

	@Override
	public long getQuantidadePosts() {
		Query query = entityManager.createNamedQuery("Post.countPosts");
		return (long) query.getSingleResult();
	}
}
